package main

import (
	"errors"
	"fmt"
)

func tryRecover(){
	// 通过 defer 获取 panic 的错误
	defer func() {
		r := recover()

		// 如果接收到的是一个 error 类型
		if err, ok := r.(error); ok {
			// 捕获异常
			fmt.Println("捕获了这个错误！", err)
		} else {
			// 重新抛出一个异常
			panic(r)
		}

	}()
	panic(errors.New("出现错误了！"))

	// 这个 painc 是捕获不了的， 因为这个里面放的不是错误
	// 那么就只能由上面的重新抛出一个异常
	// panic(123)

}

func main() {
	tryRecover()
}
